﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Data;

namespace prjMateriais
{
    public partial class frmConsultarMovimentacoes : Form
    {

        private string condicaMaterial;

        private string condicaoHistorico;

        private string condicaoPeriodo;

        public frmConsultarMovimentacoes()
        {
            InitializeComponent();
            habilitarDatas();
            limparFiltro();
        }

        public void updateGrid()
        {
            List<string> tabelas = new List<string>();
            List<string> campos = new List<string>();

            tabelas.Add(ConstTabelas.MOVIMENTACOES);
            tabelas.Add(ConstTabelas.LOTE);
            tabelas.Add(ConstTabelas.MATERIAL);
            tabelas.Add(ConstTabelas.HISTORICOMOVIMENTACAO);

            
            campos.Add(ConstTabelas.LOTE + ".Nome AS Lote");
            campos.Add(ConstTabelas.MATERIAL + ".Nome AS Material");
            campos.Add(ConstTabelas.HISTORICOMOVIMENTACAO + ".Nome AS Movimentação");
            campos.Add(ConstTabelas.MOVIMENTACOES + ".Quantidade");
            campos.Add(ConstTabelas.MOVIMENTACOES + ".Data");

            string condicao = @"(Movimentacoes.Lote = Lote.Codigo AND Lote.CodigoMaterial = Material.Codigo 
                                 AND Movimentacoes.HistoricoMovimentacao = HistoricoMovimentacao.Codigo )"
                              + " and " + getCondicaoFiltro(); 

            string sql = SqlCrud.getInstance.select(tabelas, campos, condicao);
            try
            {
                DataTable dados = Conexao.getInstance.executeQuery(sql);
                dtgrdvwMovimentacoes.DataSource = dados;
            }
            catch { }
        }

        private string getCondicaoFiltro()
        {
            string condicao = "";

            if (condicaoHistorico != null)
            {
                condicao += (condicaoPeriodo != null || condicaMaterial != null) ? condicaoHistorico + " and " : condicaoHistorico;
            }
            if (condicaoPeriodo != null)
            {
                condicao += (condicaMaterial != null) ? condicaoPeriodo + " and " : condicaoPeriodo;
            }
            if (condicaMaterial != null)
            {
                condicao += condicaMaterial + " GROUP BY Movimentacoes.Lote,Material.Nome,Lote.Nome,HistoricoMovimentacao.Nome, Movimentacoes.Quantidade,Movimentacoes.Data";
            }

            return condicao;
        }



        public void loadCombos(string tabela, string codigo, ComboBox combo)
        {
            if (combo.DataSource == null)
            {
                try
                {
                    DataTable dados = Conexao.getInstance.executeQuery(SqlCrud.getInstance.selectAll(tabela));
                    combo.DataSource = dados;
                    combo.DisplayMember = "Nome";
                    combo.ValueMember = codigo;
                }
                catch { }
            }
        }

        private void cboLote_Click(object sender, EventArgs e)
        {
            loadCombos(ConstTabelas.MATERIAL, ConstTabelas.MATERIAL_PK, cboMaterial);
            
        }

        private void cboLote_SelectedIndexChanged(object sender, EventArgs e)
        {
            condicaMaterial = "Material.Codigo = " + cboMaterial.SelectedValue;
            updateGrid();
        }

        private void cboHistorico_SelectedIndexChanged(object sender, EventArgs e)
        {
            condicaoHistorico = "Movimentacoes.HistoricoMovimentacao = " + cboHistorico.SelectedValue;
            updateGrid();
        }

        private void dtpData_ValueChanged(object sender, EventArgs e)
        {
            setCondicaoData();
        }

        private void setCondicaoData()
        {
            dtpDataDe.CustomFormat = "MM/dd/yyyy"; // BETWEEN do sq só funciona neste formato de data
            dtpDataAte.CustomFormat = "MM/dd/yyyy";
            dtpDataDe.Format = DateTimePickerFormat.Custom;
            dtpDataAte.Format = DateTimePickerFormat.Custom;
            
            condicaoPeriodo = ConstTabelas.MOVIMENTACOES + ".Data BETWEEN '" + dtpDataDe.Text + "' and '" + dtpDataAte.Text + "'";
            
            dtpDataDe.Format = DateTimePickerFormat.Short; //p/ o usuario ver no formato dd/mm/yyyy
            dtpDataAte.Format = DateTimePickerFormat.Short;
            
            updateGrid();
        }

        private void dtpDataAte_ValueChanged(object sender, EventArgs e)
        {
            setCondicaoData();
        }

        private void cboHistorico_Click(object sender, EventArgs e)
        {
            loadCombos(ConstTabelas.HISTORICOMOVIMENTACAO, ConstTabelas.HISTORICOMOVIMENTACAO_PK, cboHistorico);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnLimparFiltro_Click(object sender, EventArgs e)
        {
            limparFiltro();
        }

        private void limparFiltro()
        {
            cboHistorico.DataSource = null;
            cboMaterial.DataSource = null;
            condicaoHistorico = null;
            condicaoPeriodo = null;
            condicaMaterial = null;
            updateGrid();
            checkBox1.Checked = false;
            habilitarDatas();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
       
            habilitarDatas();
        }

        private void habilitarDatas()
        {
            dtpDataDe.Enabled = checkBox1.Checked;
            dtpDataAte.Enabled = checkBox1.Checked;
            dtpDataDe.Value = System.DateTime.Today;
            dtpDataAte.Value = System.DateTime.Today;
        }

        private void checkBox1_Click(object sender, EventArgs e)
        {
            if (!checkBox1.Checked)
            {
                condicaoPeriodo = null;

            }
            else
            {
                setCondicaoData();
            }
            updateGrid();
        }
    }
}
